package com.sky.annotation;

import com.sky.enumeration.OperationType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义的一个注解,用于标识某个方法需要进行功能字段自动填充处理
 * @author 岳海
 * @version 1.0
 * 312 / 356
 */
@Target(ElementType.METHOD)    //这个@Target用来标识当前这个注解,要加在什么位置(METHOD表示只能加在方法上起作用)
@Retention(RetentionPolicy.RUNTIME)     //这个都是自定义注解的固定写法,其实以前韩老师也自定义过注解
public @interface AutoFill {

    //指定数据库的操作类型: UPDATE  INSERT    并且这种单独指出的,就属于枚举类型enumeration
        // (因为当前弄公共字段自动填充,只有update和insert语句才需要;  你查询操作,是不会对数据库进行更改的)
    OperationType value();
    //OperationType这个是在sky-common对应的enumeration目录下,创建的一个枚举对象,只有两个值UPDATE和INSERT
    //这个OperationType表示的是枚举类型;而value()表示的就是当前注解类的一个属性,
        // 因为这个是注解,所以它对应的属性的定义格式就有后面的(),而不能直接类似int value;
        //这里注解的属性怎么用,在@AutoFill(value = OperationType.INSERT)
            //即把枚举类型里面的值OperationType.INSERT赋给了当前注解的这个属性value

    //补充说明:为啥要设置下面的两个枚举属性,
        // 因为你update和insert要修改的值不一样
        //比如update语句,那么公共变量中,只需要修改updateTime以及updateUser属性
        //而insert语句,不仅要更改上面两个变量,还要额外修改createTime和createUser属性,
        //所以设置这个枚举类型,可以用来标记
}
